package methodref02;

import org.junit.Test;

import java.util.function.BiPredicate;
import java.util.function.Function;

/**
 * 特殊的实例方法(非静态方法)的引用
 *  格式:
 *    类名::非静态方法名
 *  使用前提:
 *   1.不再适用于方法引用的默认前提(引用的方法和Lambda表达式对应接口中的抽象方法形参类型要保持一致)
 *   2.当Lambda表达式中的第一个参数,作为实例方法的调用者,第二个参数作为实例方法的参数,可以使用类名::非静态方法名
 *   3.当Lambda表达式的参数作为一个空参实例方法的调用者时候,也可以使用类名::非静态方法名
 */
public class MethodRefDemo04 {
    @Test
    public void test01(){
        Person p1 = new Person("老王");
        Person p2 = new Person("老李");

        //BiPredicate<Person,Person> bp = (person01,person02)-> person01.equals(person02);
        BiPredicate<Person, Person> bp = Person::equals;

        System.out.println(bp.test(p1, p2));
    }

    @Test
    public void test02(){
        Person p1 = new Person("老王");
        //Function<Person, String> f = (person) -> person.getName();
        Function<Person, String> f = Person::getName;
        System.out.println(f.apply(p1));
    }
}
